"""
lambda 语法格式：lambda arguments: expression
lambda是 Python 的关键字，用于定义 lambda 函数。
arguments 是参数列表，可以包含零个或多个参数，但必须在冒号(:)前指定。
expression 是一个表达式，用于计算并返回函数的结果。
"""


def t1():
    f = lambda: "Hello, world!"
    print(f())  # 输出: Hello, world!


def t2(b):
    x = lambda a: a + 10
    print(x(b))


def t3(m, n):
    x = lambda a, b: a * b
    print(x(m, n))


def t4(m, n):
    func = lambda a, b: (a * b) + (a - b)
    print(func(m, n))


def t5():
    # lambda 函数通常与内置函数如 map()、filter() 和 reduce() 一起使用，以便在集合上执行操作。例如：
    numbers = [1, 2, 3, 4, 5]
    squared = list(map(lambda x: x ** 2, numbers))
    print(squared)


def t6():
    # 使用 lambda 函数与 filter() 一起，筛选偶数：
    numbers = [1, 2, 3, 4, 5, 6, 7, 8]
    even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
    print(even_numbers)  # 输出：[2, 4, 6, 8]


def t7():
    # 下面是一个使用 reduce() 和 lambda 表达式演示如何计算一个序列的累积乘积：
    from functools import reduce
    numbers = [1, 2, 3, 4, 5]
    # 使用 reduce() 和 lambda 函数计算乘积
    product = reduce(lambda x, y: x * y, numbers)
    # 在上面的实例中，reduce() 函数通过遍历 numbers 列表，
    # 并使用 lambda 函数将累积的结果不断更新，最终得到了 1 * 2 * 3 * 4 * 5 = 120 的结果。
    print(product)  # 输出：120


def t8():
    d1 = dict([("a", 2), ("b", 3)])  # 键值对元组列表中构建字典
    print(d1)
    d2 = {x: x ** 2 for x in (2, 3, 4, 8)}  # 字典推导
    print(d2)
    d3 = dict(k1=3, k2="1", k3=5)  # 指定k,v
    print(d3)
    for k, v in d3.items():
        print(k, '--+--', v)
    print('-----')
    for i, v in enumerate(['a', 'b', 'c', 'd']):
        print(i, v)
    print('===')
    for i, v in enumerate(d1):
        print(i, v)


def zip_test():
    questions = ['name', 'quest', 'favorite color','lanca']
    answers = ['lancelot', 'the holy grail', 'blue']
    for q, a in zip(questions, answers):
        print('What is your {0}?  It is {1}.'.format(q, a))


if __name__ == '__main__':
    zip_test()
    # t8()
    # t1()
    # t2(6)
    # t3(4, 3)
    # t4(5, 9)
    # t5()
    # t6()
    # t7()
